//
//  NetWorkTools.swift
//  SinaWeibo
//
//  Created by wszyxc on 16/7/19.
//  Copyright © 2016年 wszyxc. All rights reserved.
//

import UIKit
import AFNetworking


enum  GetDataMethod:String  {
    
    case  Get
    case  Post
}


//设计一个基于AFN的网络访问的单例工具类
class NetWorkTools: AFHTTPSessionManager {
    
    

    
    //定义个单例,注意和懒加载的相似性
    
    static let sharedNetWorkTools:NetWorkTools = {
        
        let tools = NetWorkTools()
        
        tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
       
        
        return tools
    
    }()
    


    //提供对象方法 供外面调用访问网络数据
    //finished: (responseObject: AnyObject?, error: NSError?)->())
    // 闭包作为函数参数,想要传递的作为闭包的参数
    
    func request(getDataMethod:GetDataMethod, URLString:String,parameters:AnyObject?,finish:(responseObject:AnyObject?,error:NSError?)->()){
        
        //里面执行的其实还是AFN得代码,我们将外面传进来的参数赋值给它,然后再将得到的参数赋值给我们自己定义的闭包
        
        if getDataMethod == .Get{
            
            GET(URLString, parameters: parameters, progress: nil, success: { (_, responseObject) -> Void in
                
                //数据请求成功,将数据赋值给我们自己定义的闭包的参数
                finish(responseObject: responseObject, error: nil)
                
                }) { (_, error) -> Void in
                    
                    //下载失败,将错误信息传递给我们自己定义的闭包的参数
                    
                    finish(responseObject: nil, error: error)
            }
        }else{
            
            POST(URLString, parameters: parameters, progress: nil, success: { (_, responseObject) -> Void in
                
                //数据请求成功,将数据赋值给我们自己定义的闭包的参数
                finish(responseObject: responseObject, error: nil)

                
                }) { (_, error) -> Void in
                    
                    //下载失败,将错误信息传递给我们自己定义的闭包的参数
                    
                    finish(responseObject: nil, error: error)

            }
            
        }
        


}



    
}
